



S-C Assembler II    Disk Version 4.0

for the Apple II(TM) and Apple II PIus(TM)

Apple II and Apple II Plus are trademarks of Apple Computer, Inc.





















S-C Software
P.O. Box 280300                             Upgrade Kit
Dallas, Texas 75228
(214) 324-2050

---------------------------------------------------------------------

The disk included with this package contains DOS 3.2.1, in 13-sector
format.  It is bootable by both 13-sector and 16-sector controllers.

The disk is not protected, and you are free to make as many copies as
you like FOR YOUR OWN PERSONAL USE. Since it is a 13-sector disk, you
must use a 13-sector copy program to make copies.  (Copies made from
the original disk will no longer be bootable by a 16-sector
controller.)

You can make a 16-sector version by INITializing a blank 16-sector
disk, and then using MUFFIN to copy every file.  (MUFFIN is a program
on your DOS 3.3 System Master Diskette.)

---------------------------------------------------------------------

TABLE OF CONTENTS

1.  Introduction ...........................................1
    Summary of New Features.................................2

2.  Editing Features .......................................3
    Automatic Line Numbering................................3
    TAB Stops...............................................3
    Cursor Controls (Escape IJKM)...........................4
    Escape-L................................................4

3.  New Commands............................................5
    HIDE and MERGE Commands.................................6
    INCREMENT Command ......................................8
    MEMORY Command .........................................8
    RENUMBER Command .......................................9
    RESTORE Command........................................10
    USR Command............................................10
    PRT Command............................................11
    VAL Command............................................11

4.  New Directives.........................................12
    .BS -- Block Storage ..................................12
    .LIST OFF, .LIST ON -- Listing Control.................13
    .PG -- Page Control ...................................13
    .IN -- Include.........................................14
    .TF -- Target File ....................................15
    .US -- User Directive .................................15

5.  Labels.................................................16
    Normal Labels..........................................16
    Local Labels...........................................17

6.  Memory Usage...........................................18
    ROM Usage..............................................19

7.  Bibliography...........................................20


This manual and the software product it describes are copyrighted by
S-C SOFTWARE.  Neither the manual nor the diskette, nor any part
thereof, may be copied by any means without prior written consent
(except for the personal use of the registered purchaser).


Copyright July, 1980

S-C SOFTWARE
P.O. Box 280300
Dallas, TX 75228
(214) 324-2050

---------------------------------------------------------------------

INTRODUCTION


Version 4.0 of S-C ASSEMBLER II contains many new features which make
it easier to use, faster, and more powerful.

Now one integrated version runs in any Apple II (with either Integer
BASIC or Applesoft ROMs, either old or Autostart monitor ROM).  It is
compatible with the Apple Language System also.

The S-C ASSEMBLER still only requires 24K 6f RAM and one disk drive
to operate.  If more memory is available, it will be used.  Very
large programs can now be developed, using the "INCLUDE" and "TARGET
FILE" capabilities.  These allow assembly of multiple source files,
and direct storage of object code on binary files.

Sample programs on the disk to illustrate new features as well as
being important utilities.  They include:

    1.  Sample printer driver, for printers driven through the game
        port.
    2.  Shrink program, to compress blanks in old source programs
    3.  Binary string search, to search memory for a binary pattern.
        Includes a "wild card" capability.

Blanks are now compressed in source files to conserve memory and disk
space.  The compression algorithm replaces any string of consecutive
blanks with a single coded byte.  Old source files are still
compatible, but the SHRINK program which is on the disk will convert
them if you wish.  The savings due to compression usually amounts to
about 20 per cent.

The Assembler now uses a more memory-efficient method of storing the
symbol table, with variable length entries.  The symbol table is
maintained in alphabetical order, using a high-speed hashing scheme.
The symbol table is maintained in memory until a new assembly is
begun or the NEW command is typed.  This allows the MGO and VAL
commands to be more effective.

Assembler error messages are now printed with two bells, to call
attention to their presence.  After an assembly error, the offending
line is listed automatically, in a position for easy editing.








- 1 -

---------------------------------------------------------------------

SUMMARY OF NEW FEATURES


New Editing Features:

*   Ability to append source programs from disk or tape

*   Automatic line numbering

*   Parameterized RENUMBER

*   Memory usage display

*   Escape IJKM with or without Autostart ROM

*   Tabs set up for 6-char labels

*   Star-dash line automatic generation

*   No conflict with D. C. Hayes


New Assembly Features:

*   Multiple source files, using .IN directive

*   Object code directly to disk file, using .TF directive

*   Listing on and off using .LIST OFF and LIST ON

*   PG to issue form feeds during listing

*   .BS to reserve a block of storage

*   Tremendous speed increase

*   Labels up to 32 characters

*   Labels may include period

*   Local labels

*   After assembly error, the bad line is listed

*   Value of .EQ and address of .BS are printed on listing

*   Assembler and DOS memory is protected during assembly

*   ASCII literals in address expressions

*   Symbol table printed in alphabetical order





- 2 -

---------------------------------------------------------------------

EDITING FEATURES


S-C ASSEMBLER II already has the reputation of being one of the
easiest editor/assemblers to use.  The new features Version 4.0
provides make it even better!


Automatic Line Numbering:

Perhaps the most common request I have received from owners of the
previous versions of S-C ASSEMBLER II is for some method of automatic
line numbering.  Version 4.0 includes a convenient and powerful
method.

Any time the cursor is at the beginning of a line, typing a control-I
will cause the next line number to be generated. Immediately after
loading, the "next line number" will be 1000.  The number will be
displayed as four digits and a trailing blank.  The cursor will be in
position for the first character of a label, or the asterisk for a
comment line.

The "next line number" is always the value of the previously entered
line number plus the current "increment".  The increment is normally
10, but you can set it to any reasonable value with the INCREMENT
command.

If you type the control-I in any other position than the beginning of
a line, it will cause a tab to the next tab stop.


TAB Stops:

The standard tab stops have been changed to allow for a six-character
label before the opcode.  Of course, you may use any length label
from 1 to 32 characters, followed by a blank and an opcode; but the
use of the tab stops make for nicer looking programs.  (Longer labels
look nicer when left on a line by themselves, if possible.)

If control-I is typed after the last tab stop, a single space will be
generated.  If control-I is typed at the beginning of a line, rather
than a normal tab of all spaces, the next line number and a space
will be generated.

Some printer interface cards use control-I for setting various modes.
This conflicts with the use of control-I for a tab character.  If you
wish to change the tabbing character, you may do so.  It is stored at
location $100F. An alternative is to change the printer interface
control character, which is usually stored at $06F8+slot#.





- 3 -

---------------------------------------------------------------------

Cursor Controls:

Some previous versions of S-C ASSEMBLER II used control-A through
control-F as aliases for the escape-A through escape-F codes.  This
feature has been replaced by the new Apple standard cursor movement
controls: escape-I, -J, -K, and -M.  whether or not you have the
Autostart ROM, you can use these codes when you are in version 4.0.


Escape-L:

Version 4.0 uses the escape-L in two ways, depending on the position
in the input line.

If you are at the beginning of a line, escape-L will cause the first
six characters of the line to be changed to " LOAD ".  Then the rest
of line will be read off the screen, and issued as a command.  This
mimics a function in the very popular "Program Line Editor", by Neil
Konzen.  The purpose is to load a source file from the disk, after
displaying a CATALOG.

If you are at the position in which a comment or label would begin,
escape-L will generate an asterisk and a line of dashes across the
screen.  This is a very commonly used line in setting off blocks of
comments.  You will find many examples of its use in the sample
programs on the version 4.0 disk.

If the Escape-L is typed in any other position of the input line, it
is ignored.

























- 4 -

---------------------------------------------------------------------

NEW COMMANDS


There are seven new commands which have been added to S-C ASSEMBLER
II.  The JOIN command has been replaced by the new HIDE and MERGE
commands.  The RENUMBER command has been modified to offer several
new options.  The PRT command has been changed to make it more
generally usable.

HIDE                Use with LOAD and MERGE to join a source program
                    to one already in memory.

INCREMENT #         Set the increment for automatic line numbering.

MEMORY              Display the beginning and ending memory addresses
                    of the source program and the symbol table.

MERGE               Use with HIDE and LOAD to join a source program
                    to one already in memory.

RENUMBER            Renumber all lines of the source program: number
                    the first line 1000, and use an increment of 10.

RENUMBER #          Renumber all lines of the source program: number
                    the first line #, and use an increment of 10.

RENUMBER #l,#2      Renumber all lines of the source -program: number
                    the first line #1, and use an increment of *2.

RENUMBER #l,#2,#3   Renumber from line #3 through the end of the source
                    program: number line #3 as #1, and use an increment
                    of #2.

RESTORE             Use after an aborted assembly if within an "included"
                    source file (prompt is "I:") to go back to the root
                    source program.

USR                 User defined command.

VAL expression      Print the value of the expression








- 5 -

---------------------------------------------------------------------

HIDE and MERGE Commands:

These two commands, when used with the LOAD command, allow you to
join a program from disk or tape to a program that is already in
memory.  (This replaces the tape JOIN command in previous versions of
S-C ASSEMBLER II.)

HIDE temporarily changes the HIMEM pointer so that it appears as if
there were no source program in memory.  To remind you that you are
HIDE-mg, the prompt symbol changes to "H:".  After HIDE-ing a program,
you can LOAD another one from disk or tape.  Then you type MERGE to
join the two programs together.

After this sequence of commands, the program which was already in
memory will follow after the program just LOADed. If the line numbers
are not already as you wish them to be, you can use RENUMBER to
assign new ones.

For example, suppose that we have two source programs on the disk
named "SRCONE" and "SRCTWO".  We want to join them together so that
"SRCONE" precedes "SRCTWO".





































- 6 -

---------------------------------------------------------------------

    :LOAD SRCONE
    :LIST

    1000 *  PROGRAM NUMBER ONE
    1010 MAIN   JSR SUBROUTINE
    1020        RTS

    :LOAD SRCTWO
    :LIST

    1000 *   SUBROUTINE TO DO SOMETHING
    1010 SUBROUTINE
    1020        LDA BLAH.BLAH.BLAH
    1030        STA SOMEWHERE
    1040        RTS

    :HIDE
    H:LIST

    H:LOAD SRCONE
    H:LIST
    1000 *  PROGRAM NUMBER ONE
    1010 MAIN   JSR SUBROUTINE
    1020        RTS

    H:MERGE
    :LIST

    1000 *   PROGRAM NUMBER ONE
    1010 MAIN   JSR SUBROUTINE
    1020        RTS
    1000    *   SUBROUTINE TO DO SOMETHING
    1010 SUBROUTINE
    1020        LDA BLAH.BLAH.BLAH
    1030        STA SOMEWHERE
    1040        RTS

    :RENUMBER
    :LIST

    1000 *   PROGRAM NUMBER ONE
    1010 MAIN   JSR SUBROUTINE
    1020        RTS
    1030 *   SUBROUTINE TO DO SOMETHING
    1040 SUBROUTINE
    1050        LDA BLAH.BLAH.BLAH
    1060        STA SOMEWHERE
    1070        RTS


HIDE and MERGE Example

- 7 -

---------------------------------------------------------------------

INCREMENT Command:

Sets the increment used for automatic line number generation.  The
increment is normally 10, butyou may set it to any value between 0
and 9999.  (Of course, an increment of 0 makes no sense.  Neither
does a large value like 9999.  But you can use them if you wish!)

    :INC 5          (set increment to 5)


MEMORY Command:

Displays the beginning and ending memory addresses of the source
program and of the symbol table.

    :MEMORY
    SOURCE PROGRAM: $94F3-9600
      SYMBOL TABLE: $2500-2674

Memory between the top of the symbol table and the bottom of the
source program is free to be used without clobbering anything.

The assembler automatically protects (during assembly) memory from
$1000 to the top of the symbol table, and from the bottom of the
source program through $FFFF.  This insures that your object program
will not clobber the assembler, the source program, or DOS.






























- 8 -

---------------------------------------------------------------------

RENUMBER Command:

Renumbers all or part of the lines in your source program with the
specified starting line number and increment. There are three
optional parameters for specifying the line number to assign the
first renumbered line (base), the increment, and the place in the
program to begin renumbering (start).  There are four possible forms
of the command:

    :REN            Renumber the whole source program:
                    BASE=1000, INC=10, START=0

    :REN #          Renumber the whole source program:
                    BASE=#, INC=10, START=0

    :REN #l,#2      Renumber the whole source program:
                    BASE=#1, INC=#2, START=0

    :REN *l,#2,#3   Renumber all lines from #3 through the end:
                    BASE=#l, INC=#2, START=#3

The last form above is useful for opening up a "hole" in the line
numbers for entering a new section of code.

    :LIST
    1000 *   LITTLE RENUMBER EXAMPLE
    1005 SAMPLE LDA $35
    1006        STA $37
    1010        RTS

    :RENUMBER
    :LIST
    1000 *   LITTLE RENUMBER EXAMPLE
    1010 SAMPLE LDA $35
    1020        STA $37
    1030        RTS

    :RENUMBER 100
    :LIST
    0100 *   LITTLE RENUMBER EXAMPLE
    0110 SAMPLE LDA $35
    0120        STA $37
    0130        RTS

    :RENUMBER 2000,4
    :LIST
    2000 *   LITTLE RENUMBER EXAMPLE
    2004 SAMPLE LDA $35
    2008        STA $37
    2012        RTS

    :RENUMBER 3000,10,2008
    :LIST
    2000 *   LITTLE RENUMBER EXAMPLE
    2004 SAMPLE LDA $35
    3000        STA $37
    3010        RTS

- 9 -

---------------------------------------------------------------------

RESTORE Command:

Restores the root source program if an assembly is aborted while
inside an "included" module.

The "root source program" is the source program that is in memory at
the time the "ASM" command is issued.  If this source program uses
the ".IN" directive to include additional source files, it is
possible that assembly might be aborted while the "root" program is
"hidden".  An assembly may be aborted either manually by typing a
RETURN key during the listing phase, or automatically due to an error
in the source program.

If the assembly is aborted during the time that the root program is
hidden, the prompt character changes from ":" to "I:".  The RESTORE
command will reset the memory pointers so that the root program is no
longer hidden, and change the prompt character back to ":".

You do not have to use the RESTORE command after an abort unless you
wish to get back to the root source program for editing purposes.  If
you type the ASM command, the assembler automatically restores before
starting the assembly.

If an assembly aborts due to an error in a source line, you may
correct the source line, SAVE the module on the appropriate file, and
type ASM to restart the assembly.


USR Command:

This command is provided for the user who wishes to add his own
commands to the S-C ASSEMBLER II.

When you type the command "USR", a JSR $1006 instruction is executed.
If you have not installed a JMP to your own program at $1006, the
command is equivalent to a "no operation" command.  You can write a
program to process your own command, and put a JMP instruction to it
at $1006.

The S-C ASSEMBLER II command parser scans for up to two numeric (line
number) fields following the command.  The scan skips over any
non-numeric characters until it either finds a digit or the end of
line.  If any numbers are found, the first one will be stored in
$3A-$3B, and the second at $3C-$3D.  the contents of the x-register
indicates how many numbers were found: X=0 if no numbers found, X=2
if one number found, and X=4 if two numbers found.

The entire command line is stored in the monitor input buffer,
starting at $0200.  An index to the next character after the last
digit of the second number (or the end of line if there were less
than two numbers) is in $06.



- 10 -

---------------------------------------------------------------------

PRT Command:

In previous versions of S-C ASSEMBLER II, the PRT command turned on a
printer driver for a particular printer.  This driver was built-in to
the assembler, and was designed for the practical Automation DMTP
uP-6 printer, using a serial scheme through the game port.  Very few
customers were able to use the PRT command without modifying the
program.

Version 4.0 provides a more general technique, without wasting memory
for those who have no need for the PRT command.  (Those who have an
Apple parallel of Serial printer Interface Card may use the PR#slot
command.)  When you type the command "PRT", a JSR $1009 instruction
is executed.  If you have not installed a JMP to your own printer
driver at this location, the command is equivalent to a "no
operation" command.  You can write a program to drive your own
printer through the game port, or through any interface board which
requires special handling.

If you have no need for the PRT command, you may use it as a second
USR command.


VAL command:

The VAL command will evaluate any legal operand expression, and print
the value in hexadecimal.  It may be used to quickly convert decimal
numbers to hexadecimal, to determine the ASCII code for a character,
or to find the value of a label from the last assembled program.

    :VAL 12345
    3039
    :VAL-21846
    AAAA
    :VAL 'X
    0058
    :VAL LOOPA+3
    084E



















- 11 -

---------------------------------------------------------------------

NEW DIRECTIVES


Seven new assembler directives have been added to S-C ASSEMBLER II.

    .BS expression  Reserve <expression> bytes
                    at the current location in
                    the object program.

    .LIST OFF       Turn off the assembly listing.

    .LIST ON        Turn on the assembly listing.

    PG Page eject. Issues a Form Feed character.

    .IN file name   Include a source program from the specified file.

    .TF file name   Put the object program on the specified file.

    .US User programmable directive.


Block Storage:      .BS exp

Reserves a block of <exp> bytes at the current location in the
program.  The expression specifies the number of bytes to advance the
location counter.  If there is a label, it assigned the value at the
beginning of the block.

The address of the beginning of the block will be printed in the
address column of the assembly listing.

If the object code is being stored directly into memory, no bytes are
stored for the .BS directive.  However, if the object code is being
written on a file using the .TF directive, the .BS directive will
write <exp> bytes on the file. All the bytes written will have the
value $00.
















- 12 -

---------------------------------------------------------------------

Listing Control:    .LIST OFF
                    .LIST ON


This pair of directives turns the assembly listing on and off.  If
.LIST OFF is put at the beginning of the source program, and no .LIST
ON is used, no listing at all will be produced.  The program will
assemble much faster without a listing, as most of the time is
consumed in putting characters on the screen and scrolling the screen
up.

If you put .LIST OFF at the beginning of your source program, and
.LIST ON at the end, only the alphabetized symbol table will print.

You may also use this pair of directives to bracket any portion of
the listing you wish to see or not see.


Page Control:       .PG

Prints an ASCII Form Feed character ($0C).  If the assembly listing
is being printed on a printer which recognizes this character, a form
feed will occur and the next listing line will appear at the top of
the next page.  The .PG line itself is not listed.

































- 13 -

---------------------------------------------------------------------

Include:            .IN file name

Causes the contents of the specified source file to be included in
the assembly.

The program which is in memory at the time the ASM command is typed
is called the "root" program.  Only the root program may have .IN
directives in it.  If you attempt to put .IN directives in an
included program, the "NESTED .IN" error will print.

When the .IN directive is processed, the root program is temporarily
"hidden" and the included program is loaded. Assembly then continues
through the included program.  When the end of the included program
is reached, it is deleted from memory and the root program is
restored.  Assembly then continues with the next line of the root
program.

If you type the MON C command (a DOS command) before beginning
assembly, the LOAD commands issued by the assembler will be printed
with the listing.  Each included program is loaded in turn during
pass one of the assembly, and again during pass two.

The .IN directive is useful in assembling extremely large programs,
which cannot fit in memory all at once.  It is also useful for
connecting together a library of subroutines with a main program.

The <file name> portion of the directive is in standard DOS format,
and may include volume, slot, and drive number.


























- 14 -

---------------------------------------------------------------------

Target File:        .TF file name

Causes the object code generated to be stored on a binary file,
rather than in memory.  Only the code which follows the .TF directive
will be stored on the file.  Code will be stored on the file until
another .TF directive is encountered, or until a .TA or .OR directive
is encountered.

The <file name> specifier may include volume, drive, and slot numbers
if necessary.  If you have both .IN and .TF directives in the same
assembly, and the files involved are not on the same disk, you will
need to specify slot number (and maybe drive number) with every .IN
and with every .TF directive.

If your program consists of several pieces with different origins,
and you want them all to be put on files, each piece will require a
separate .TF directive.  The object code is written on a binary file,
which may only have one origin.

During assembly, S-C ASSEMBLER II temporarily patches DOS to allow a
binary file to be handled with text file commands. It also creates a
text file with your specified name and uses text file techniques to
write the object code into the file.  When assembly is complete, or
when the .TF range is ended by encountering another .TF or .TA or
.OR, the text file is transformed into a binary file by modifying the
DOS directory entry.

If you have typed MON C (a DOS command) before assembly, the DOS
commands issued by the assembler for the .TF directive will print on
the assembly listing.  For each .TF directive, during pass two, you
will see the following sequence:

OPEN file name
DELETE file name
OPEN file name
WRITE file name



User Directive      .US

To allow for possible expansion of the assembler by users, the .US
directive has been included.  When the opcode is processed, it will
branch to $100C.  That location normally contains a JMP instruction,
which treats the .US as a comment.

If you desire to use the .US directive, you change it to jump to your
own program.  Details of the steps necessary to implementing your own
directives are not available at this time.  You may disassemble S-C
ASSEMBLER II, if you wish, and examine the existing directives.



- 15 -

---------------------------------------------------------------------

LABELS


There are two types of labels used in Version 4.0 of S-C ASSEMBLER
II; normal labels, and local labels.

Normal Labels:

In previous versions of S-C ASSEMBLER II, labels could be 1-4 or
1-6 characters in length.  In version 4.0, labels may be up to 32
characters long.

The first character of a normal label must be a letter; subsequent
characters may be letters, digits, or the period character (".").
The period is useful for making long labels readable.  For example, a
subroutine to read the next source line might be named
"READ.NEXT.SOURCE.LINE".

Tab stops are set up within the editor assuming that most of your
labels will be six characters or less.  However, since the assembler
is relatively free-format, you may type any length label followed by
a blank and the opcode, operand, andcomment fields.  Or, if you wish,
you may type the long label on a line all by itself.  In this form,
the label is assigned the current value of the location counter, just
as if you had appended ".EQ *" to the line.

    1000 *   SAMPLE PROGRAM WITH LONG LABELS
    1010 SOURCE.LINE.POINTER .EQ $13 AND $14
    1020 CHAR.POINTER .EQ $12
    1030 *
    1040 READ.NEXT.CHAR.FROM.LINE
    1050        LDY CHAR.POINTER
    1060        LDA (SOURCE.LINE.POINTER),Y
    1070        INC SOURCE.LINE.POINTER
    1080        RTS





















- 16 -

---------------------------------------------------------------------

Local Labels:

Version 4.0 introduces a new kind of label, called "local labels".
The main purpose for local labels is to make programs more readable
by reducing the number of label names you must invent.  As a side
effect, local labels save considerable space in the symbol table
during assembly; they only require two bytes each.  The use of local
labels also encourages structured programming habits.

Local labels have a period as the first character, followed by one or
two digits.  Any label from ".0" through ".99" may be used.

Local labels are defined internally relative to the normal label
which comes before it in the source program.  The value must be no
more than 255 greater than the value of the associated normal label.

Since each set of local labels is associated with a particular normal
label, you may re-use the same local label names.

Here is an example of three little routines in the same source
program, using normal and local labels:

    1000 PRINT.MESSAGE
    1010        PHA          SAVE A-REGISTER
    1020 .1     JSR PRINT.CHARACTER
    1030        INY
    1040        LDA MESSAGES,Y
    1050        BNE .1       =0 FOR END OF MESSAGE
    1060        PLA          RESTORE A-REGISTER
    1070        RTS
    1080 *
    1090 GET.NEXT.CHARACTER
    1100        LDY CHAR.POINTER
    1110        LDA INPUT.BUFFER,Y
    1120        CMP #RETURN
    1130        BEQ .1       END OF LINE
    1140        INC CHAR.POINTER
    1150 .1     RTS
    1160 *
    1170 GET.NEXT.NONBLANK .CHAR
    1180 .1     JSR GET.NEXT.CHARACTER
    1190        BEQ .2       END OF LINE
    1200        CMP #BLANK
    1210        BEQ .1
    1220 .2     RTS








- 17 -

---------------------------------------------------------------------

MEMORY USAGE


The S-C ASSEMBLER II program is about 5376 bytes long ($1500), and
occupies $1000 through $24FF in memory.  The symbol table begins at
$2500 and extends upward; your source program begins at the bottom of
DOS and extends downward.

During source program entry or editing, memory usage is monitored so
that the source program does not grow so large as to overlap the
symbol table.  Overlapping will cause the "MEM FULL ERROR" message to
print.  During assembly, memory required by the symbol table is
monitored, to prevent the symbol table from overlapping the source
program. Overlapping will generate the "MEM FULL ERROR" message and
abort the assembly.

In addition, memory usage by the object program is monitored, so that
it will not destroy the source program, DOS, the S-C ASSEMBLER II,
the symbol table, or switch any I/O addresses.  Therefore, if the
object program bytes are directed at any memory address between $1000
and the top of the symbol table, or any address above the beginning
of the source program, the "MEM PROTECT ERROR" will be printed and
assembly aborted.

The assembler also uses a many locations in page zero during editing
or assembly.  However, the only ones which you need to maintain
unchanged during execution or testing of your object program are
$4A-4D, $CA-CD, $73-74, $D9.  Location $D9 is used by DOS as a flag
to allow commands to be entered.  The other locations are used to
point at the beginning and end of your source program and symbol
table.

Page one ($100-1FF) is used both as a stack and as storage for the
symbol table routines.  The high addresses in page one are used for
the stack.  The low end is used for a symbol buffer and for pointers
to the 27 hash chains used in storing the symbol table.

Page two ($200-2FF) is used as an input buffer.

The high end of page three ($3D0-3FF) is used by DOS and by the
assembler.  You must not change any bytes between $3D0 and $3EF.
$300-3CF is free to be used in any way you wish.

Locations $400-7FF are used by the Apple II as the screen buffer.
There are 32 bytes which are unused by the screen image, which are
instead used by certain peripheral boards such as the disk controller
or printer interface boards.

Locations $800-$FFF are free to be used for storing your object
program.  Also, with care and planning, you can find space for object
program storage between the top of the symbol table and the bottom of
the source program.  If the space there is too difficult to
determine, or insufficient size, you need to use the ".TF" directive
to store the object program directly on a binary disk file.


- 18 -

---------------------------------------------------------------------

ROM USAGE


Since Version 4.0 will execute regardless of which set of language
ROMs is in force, S-C ASSEMBLER II no longer uses any routines from
the Integer BASIC ROMS.  The following table is believed to be a
complete list of the monitor ROM routines used.

    F94A        Print (X) blanks
    FBF4        Advance cursor
    FC10        Backspace cursor
    FC1A        Move cursor up one line
    FC2B        An RTS instruction
    FC42        Clear to end of page
    FC66        Move cursor down one line
    FC9C        Clear to end of line
    FCA8        Delay
    FD0C        Read next input character
    FD84        Add char to input line
    FD99        Print (Y,X) in hex with dash
    FDDA        Print (A) in hex
    FDED,FDF0   Print (A) as ASCII char
    FE00        Display memory in hex
    FE2C        Move block of memory
    FECD        Write block of memory on tape
    FEFD        Read tape into memory
    FF2D        Print "ERR", ring bell
    FF3A        Ring bell
    FFA7        Get hex number
    FFBE        Process monitor command
    FFC7        Clear monitor mode byte
    FFCC        Table of monitor commands














- 19 -

---------------------------------------------------------------------

BIBLIOGRAPHY


At long last, publishers have begun to release some good books for
learning how to program the 6502 microprocessor. Some new ones which
have been published since the S-C ASSEMBLER II Version 3.2 Reference
Manual was written are listed here.

Apple Assembly Line, a monthly newsletter published by S-C SOFTWARE.
See advertisement inside back cover for details.

APPLE-GRAM, newsletter of the Apple Corps of Dallas, Texas.
Subscriptions currently $12/year, from Apple Corps, Attn: Membership
Chairman, P. 0. Box 5537, Richardson, TX 75080.  Contains many useful
articles covering every aspect of the Apple II, including assembly
language programming.

6502 Software Design, Leo J. Scanlon.  One of the Blacksburg
Continuing Education Series, published by Howard W. Sams & Co., 1980.
270 pages, paper, $10.50.

6502 Assembly Language Programming, Lance A. Leventhal.
Osborne/McGraw-Hill, Inc., 1979.  Over 80 programming examples,
tested on an Apple II.

Programming & Interfacing the 6502, With Experiments, Marvin L. De
Jong.  One of the Blacksburg Continuing Education Series, published
by Howard W. Sams & Co., 1980.  414 pages, paper, $13.95.

6502 Software Gourmet Guide & Cookbook, Robert Findley.  Scelbi
Publications, 1979.  204 pages, paper, $10.95.  Includes listings of
conversion routines, search and sort routines, and floating point
routines.

6502 Games, Rodney Zaks, SYBEX.  The third in the SYBEX series on
programming the 6502.  Includes listings of games in assembly
language, of the type which are usually programmed in BASIC.

Wozpak II and Other Assorted Goodies.  A collection of Apple II
documentation published by the publishers of CALL A.P.P.L.E.  It
contains many useful programs in assembly language which can be used
and/or studied.

Practical Microcomputer Programmina: the 6502, W. J. Weller, Northern
Technology Books, 1980.  459 pages, $32.95. Includes a listing of a
6502 assembler and of a debugging package.







- 20 -

---------------------------------------------------------------------

                    Apple Assembly Line

A newsletter dedicated to Apple Assembly Language!


* Tutorial articles for beginners!                    
* Advanced hints and techniques which save memory and time!                                           
* Ways to modify and improve standard products!       
* Utility programs, ready to type in and run!         
* Super subroutines for use in your programs!          
* Commented assembly listings of code found in DOS and the Apple ROMS!                                 
* New features you can add to your copy of the S-C ASSEMBLER II Version 4.0!
* A place to publish your handy routines and articles and advertisements!
* Editor and principal author is Bob Sander-Cederlof, author of the
  S-C ASSEMBLER II!
* Only $12 per year (12 issued)     
* All back issues stil in print!    
* A quarterly disk available to subscribers ($15 each), containing all
  the source code printed in AAL during the quarter!


Partial Table of Contents

October, 1980       
  How to Add and Subtract One           
  General Message Printing Subroutine   
  Lower Case with S-C ASSEMBLER II      
  Hardware Error in ALL 6502 Chips    

November, 1980
  Variable Cross Reference for Applesoft
  Putting S-C ASSEMBLER II Programs on Text Files
  A Use for the USR Command
  A simulated Numeric Key Pad

December, 1980
  Intelligent Disassemblers
  Integer BASIC Pretty Lister
  Listed Expressions with the .DA Directive
  Block MOVE and COPY for S-C ASSEMBLER II
  Handling 16 bit Comparisons     

January, 1981       
  How to Move Memory      
  Computed GOSUB for Applesoft
  Putting COPY into S-C ASSEMBLER II
  EDIT Command for S-C ASSEMBLER II (like Kon-Zen's PLE)
  TAB Locations in S-C ASSEMBLER II 

February, 1981
  Apple Noises and Other Sounds
    Simple Tone and Bell Sounds
    Machine Gun, Laser Swoop, Laser Blast, Inch-Worm
    Touch-Tone Simulator
    Morse Code Output
  Stuffing Object Code into Protected Places
  Multiplying on the 6502

March, 1981
  A Beautiful (Memory) Dump
  So-Called Unused Opcodes (Secret Things Your 6502 Can Do!)
  EDIT and COPY on the Language Card
  Commented Listing of DOS 3.2.1 RWTS
  & Command Interface for S-C ASSEMBLER II

April, 1981
  Text File I/O in Assembly Language Programs
  80 Columns on your Printer
  Applesoft Internal Entry Points
  Modify S-C ASSEMBLER II Error Messages
  Fast String Input Routine for Applesoft
  Hiding Things Under DOS
  Commented Listing of DOS 3.2.1 Formatter
  Commented Listing of DOS 3.3 Formatter
  Substring Search for Applesoft

May, 1981
  Hi-Res SCRN Function for Applesoft
  Conquering Paddle Jitter
  Tutorial About Shifting (ASL, LSR, ROL, and ROR Opcodes)
  6502 Programming Model
  Commented Listing of DOS 3.2.1 $B800-BCFF

June, 1981
  More About 80 Columns on Your Printer
  Two Fancy Tone Generators
  More About Multiplying on the 6502
  Specialized Multiplications
  Commented Listing of DOS 3.3 $B800-$BCFF
  A Review of "Beneath Apple DOS"

July, 1981
  Using Firmware Card in Slot 4
  The Lower Case Apple
  Screen Printer
  Restoring Clobbered Page 3 Pointers
  Step-Trace Debugging Utility


Quarterly Disks

  All source programs printed in the newsletter are available on
  quarterly disks for $15 per disk. Source code is formatted for the
  S-C ASSEMBLER II Version 4.0.

AAL-QD#1    Oct 1980 thru Dec 1980  (Now)
AAL-QD#2    Jan 1981 thru Mar 1981  (Now)
AAL-QD#3    Apr 1981 thru Jun 1981  (Now)
AAL-QD#4    Jul 1981 thru Sep 1981  (Soon)

S-C ASSEMBLER II Version 4.0

Still the easiest Apple assembler for beginners, and powerful enough
for experts! Thousands of happy owners!

You can purchase it at many local computer stores for $55. If not
available at your store, you can order by mail from S.C SOFTWARE
(same price, we pay postage in USA, Mexico, and Canada).

Apple Assembly Line Subscriptions and Back Issues

Only $12 per year in the USA, Mexico, and Canada.  Other countries
add $12/year for postage.  All back issues are available at $1.20
each. (Other countries add $1 postage for each back issue ordered.)


S-C SOFTWARE
P.O. Box 280300
Dallas, TX 75228
(214) 324-2050


Apple is a trademark of Apple Computer, Inc,

---------------------------------------------------------------------
